iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0
Python

用 Python 打造你的 Discord BOT系列 第 3

[Day 03] 第一個 Discord BOT (二):讓 BOT 上線

  • 分享至 

  • xImage
  •  

昨天我們成功地把 Discord BOT 加到伺服器了,今天來讓它上線吧!

進度

roadmap03

今天會使用昨天拿到的 Token,讓 Discord BOT 上線,並加入簡單的回應設定 (使用範例程式)。

要用什麼工具?

到目前為止,都還沒真的開始寫程式,都還只是使用 Discord 這個平台本身提供的功能與工具而已。今天,終於要來寫第一支程式了!

但是,在開始寫程式之前,第一步就是要先決定我們要用哪一個套件。沒想到,與 Discord API 相關套件的選擇有夠多 (有人在 Github 整理了一個清單),常見的語言都有,光 python 就有好幾個,挑選套件就花了我不少時間。經過一番研究之後,我最後選擇使用 discord.py 來開發 DC BOT。

當前最新版本是 v2.4.0

為什麼選 discord.py?

在挑選 python 套件時,我通常習慣看以下幾點:

  1. 大家對套件的評價與討論
  2. Github 上的星星數 (越多越好)
  3. 套件最後更新的日期 (越近期越好)
  4. 文件品質 (越完整、好閱讀越好)
  5. 程式碼範例 (感受一下好不好用)

前面有說到,python 的 Discord API 套件有好幾個,除了 discord.py 之外,還有:

discord.py 是 14.7k ★

總和下來,我覺得 discord.py 這個元老級的套件最適合。當然,並不是說其他套件不好,只是單就 Discord BOT 這件事來說,discord.py 是我目前認為最好的選擇。

另外,在查看各個套件的文件時,我發現有幾個套件之間的相似度非常的高。

一開始,我還很納悶,因為能這麼相似應該就是 fork 出來的,但會需要 fork 出來的原因,通常就是原本的套件不維護了,或是有某個重大 issue 沒時間 (或沒辦法) 解決。但是偏偏這幾個套件近期都還有再更新,issue 那邊也沒有看到什麼特別的討論。因此,後來有再更仔細地查資料,結果發現,原來 discord.py 這個套件背後有一段有趣(?)故事。

discord.py 的休息與再出發

整個故事的開頭是 discord.py 的作者 Rapptz 在 2021-08-28 在 Gist 發布了一個公告 (Gist 連結),宣布不繼續維護了 discord.py 了。原因有點複雜,簡單來說就是覺得 Discord 官方在搞事 (發展方向與社群理念不合、沒有達成承諾等),讓自己無心繼續維護下去。雖然不打算讓別人接手這個 repository,但很歡迎大家 fork 出來繼續維護。

這篇 Gist 很長但內容也很精彩,說了很多當時 Discord 官方與社群的來回互動

不過,後來在 2022-03-06,作者又強勢回歸了 (Gist 連結)。會回來繼續開發的主要原因是,Discord 官方要 decommission Discord API v6 和 v7 (2022-02-15 官網Github 都有公告)。

有兩點值得注意一下:

  1. 首先,不是 deprecate 而已,是 decommission,而偏偏當時的 discord.py (v1.7.3) 是使用 v7 的 API
    這會導致當前所有使用 discord.py 穩定版本所開發出來的 Discord BOT 之後都不能使用
  2. 這個公告非常突然,二月中公告,五月就實施

    不過,2022-05-12 公告說會改成延後到 2023 年初才 decommission

所以,為了守護世界和平讓使用 discord.py 開發的 Discord BOT 還可以繼續使用,Rapptz 最終決定恢復開發,然後就一路繼續維護到現在了。

第一個 Discord BOT

前面扯太多八卦,該回到正題了

1. 安裝套件

首先,在 terminal 下安裝指令

pip install -U discord.py

-U 等同於 --upgrade,確保如果已經有安裝過,也會更新到最新版本

安裝完成後,用 pip list 確認一下有裝好了,其中 discord.py 的版本是 2.4.0

其他的是相依套件

另外,預設安裝的 discord.py 是沒有語音模組的,如果需要的話,要把安裝指令改成

pip install -U discord.py[voice]

不過,本系列文章目前沒有打算介紹語音模組相關的功能,這部分就留給大家自行研究了~

2. Quickstart

接下來,執行官網上的範例

記得要改成自己的 Token

吐槽一下,不知道為什麼官網範例與 Github 上的範例不同...

# day03.py

import discord

intents = discord.Intents.default()
intents.message_content = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f'We have logged in as {client.user}')

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run('your token here')

執行後,就可以在終端看到以下畫面

此時,再切到 Discord 伺服器查看成員名單,可以發現 Discord BOT 上線了!

接著,在輸入框輸入 $hello,Discord BOT 就會回覆訊息

如果停止執行程式 (在 terminal 按下 ctrl + C),則可以看到 Discord BOT 又回到原本的離線狀態。

小結

今天我們使用 discord.py 成功地讓 Discord BOT 上線了,並且可以跟 Discord BOT 做簡單的互動。


上一篇
[Day 02] 第一個 Discord BOT (一):註冊與取得 Token
下一篇
[Day 04] 第一個 Discord BOT (三):與 BOT 互動
系列文
用 Python 打造你的 Discord BOT6
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言